package com.zim.access.common.chat;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;

import java.util.UUID;

/**
 * 会话模型
 *
 * @author hanyue
 * @version 1.0
 * @date 2021/12/21 上午12:09
 */
@Data
@Accessors(chain = true)
@NoArgsConstructor
public class Session<T> {

    /**
     * UUID 保持唯一即可
     */
    private String id;

    /**
     * 聊天来源方
     */
    @NonNull
    private From from;

    /**
     * 聊天到达方
     */
    @NonNull
    private To to;

    /**
     * 当前会话的最后消息
     */
    private LastMsg<T> lastMsg;

    /**
     * 消息未读数
     */
    private Long unReadCut;

    /**
     * 会话创建时间
     */
    private Long timestamp;

    /**
     * 自动填充属性
     *
     * @return
     */
    public Session<T> fillAttribute() {
        if (StringUtils.isEmpty(this.id)) {
            this.id = UUID.randomUUID().toString();
        }

        if (null == this.timestamp) {
            this.timestamp = System.currentTimeMillis();
        }

        if (null == this.unReadCut) {
            this.unReadCut = 0L;
        }

        return this;
    }

    @Data
    @Accessors(chain = true)
    @NoArgsConstructor
    public static class From {

        /**
         * 用户 ID
         */
        @NonNull
        private String id;

        /**
         * 用户名称
         */
        private String name;
    }

    @Data
    @Accessors(chain = true)
    @NoArgsConstructor
    public static class To {

        /**
         * 用户 ID
         */
        @NonNull
        private String id;

        /**
         * 用户名称
         */
        private String name;
    }

    @Data
    @Accessors(chain = true)
    public static class LastMsg<T> {

        /**
         * 最后的消息 ID
         */
        private String id;

        /**
         * 最后的消息内容
         */
        private T content;

        /**
         * 最后的消息时间
         */
        private Long timestamp;
    }
}
